package bishizhuanyong.京东;

import java.util.Scanner;
import java.util.Stack;


//一个括号串的最长合法子序列长度，就是这个串的权重
//给定一个括号字符串，求它的所有子串的权重总和

//这道题和 求一个括号字符串的最长有效子串 有区别，但这个题要好好看看（求一个括号字符串的最长有效子串），之前左程云讲过，自己忘了！！！！
public class jingdong3 {

    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        String str = s.next();
        /*int maxLen = getMaxLen("())())");
        int count=0;
        for (int i=0;i<str.length();i++){
            for (int j=i+1;j<=str.length();j++){
                String substring = str.substring(i, j);
                int maxLen1 = getMaxLen(substring);
                count+=maxLen1;
            }
        }
        System.out.println(count);*/
        getMaxLen22(str);
    }


    //求一个括号串的 最长合法子序列 （注意，和最长合法自串 区分）
    public static int getMaxLen(String s){
        if (s.length()<2)
            return 0;
        int[] max=new int[s.length()];
        max[0]=0;
        int maxlen=Integer.MIN_VALUE;
        int prelen=0;
        for (int i=1;i<max.length;i++){
            if (s.charAt(i)=='('){
                max[i]=prelen;
            }else {
                for (int j=i-1;j>=0;j--){
                    if (s.charAt(j)=='(') {
                        if (j!=0)
                            max[i] = Math.max(max[i], max[j - 1] + 2);
                        else
                            max[i] = Math.max(max[i], 2);
                    }
                }
            }
            maxlen=Math.max(maxlen,max[i]);
        }
        return maxlen;
    }

    //0 1 2 3 4
    //看牛客的题解上写的，这个是正解
    //并不会统计 每个子串，和子串对应的权重
    //而是统计，每一个括号，对总体所做的贡献！！，这个想法，很重要！
    //具体看这里https://www.nowcoder.com/discuss/1039184?page=1
    public static void getMaxLen22(String s){
        char[] chars = s.toCharArray();
        long res=0;
        Stack<Integer> stack=new Stack<>();
        for (int i=0;i<chars.length;i++){
            if (s.charAt(i)=='('){
                stack.push(i);
            }else {
                if (!stack.isEmpty()){
                    Integer match_index = stack.pop();
                    res+=(match_index+1)*(chars.length-i)*2;
                }
            }
        }
        System.out.println(res);
    }
}
